/**
 * @author 挚爱之夕
 * @version 1.0
 * @implSpec 困难
 * 给定两个大小分别为 m 和 n 的正序（从小到大）数组 nums1 和 nums2。
 * 请你找出并返回这两个正序数组的 中位数 。
 * 算法的时间复杂度应该为 O(log (m+n)) 。
 * 输入：nums1 = [1,3], nums2 = [2]
 * 输出：2.00000
 * 解释：合并数组 = [1,2,3] ，中位数 2

 * 输入：nums1 = [1,2], nums2 = [3,4]
 * 输出：2.50000
 * 解释：合并数组 = [1,2,3,4] ，中位数 (2 + 3) / 2 = 2.5

 * 思路：归并排序
 * @since 2023-08-27 10:55
 */
public class _004寻找两个正序数组的中位数 {
    public static void main(String[] args) {
        int[] nums1 = {1, 3}, nums2 = {2};
        System.out.println(findMedianSortedArrays(nums1, nums2));
    }

    public static double findMedianSortedArrays(int[] nums1, int[] nums2) {
        int len = nums1.length + nums2.length;
        int cur = 0, l = 0, r = 0;
        int[] nums = new int[len];
        while(l < nums1.length && r < nums2.length){
            if(nums1[l] < nums2[r]){
                nums[cur++] = nums1[l++];
            }else{
                nums[cur++] = nums2[r++];
            }
        }
        while(l < nums1.length){
            nums[cur++] = nums1[l++];
        }
        while(r < nums2.length){
            nums[cur++] = nums2[r++];
        }
        if(len % 2 == 0){
            return (nums[len / 2 - 1] + nums[len / 2])/ 2.0;
        }else{
            return nums[len/2];
        }
    }
}
